# For each..next

for each..next 控制语句是一个脚本迭代构造，可为逗号分隔列表中的每个值执行一个或几个语句。列表中的每个值均会执行由 for 和 next 限定的循环中的语句。

语法：

特殊语法可以生成带有当前目录内文件和目录名称的列表。

for each var in list

[statements]

[exit for [ ( when | unless ) condition ]

[statements]

next [var]

参数：

For each 参数

| 参数 | 说明 |
| --- | --- |
| var | 脚本变量名称，可为每次循环执行获取列表中的新值。如果 var 在 next 之后指定，变量名必须与对应的 for each 之后查找的变量名相同。 |

var 变量的值可通过循环内的语句进行更改，但这并非出色的编程做法。

如果在循环内遇到 exit for 子句，则脚本执行会转移至表示循环结束的 next 子句之后的第一个语句。exit for 子句可通过选择性使用 when 或 unless 后缀变为有条件子句。

信息注释由于 for each..next 语句是控制语句，并以分号或换行符结束，三个可能子句（for each、exit for 和 next）中任意一个子句都不得跨越行边界。

语法：

list := item { , item }

item := constant | (expression) | filelist (mask) | dirlist (mask) | fieldvaluelist (fieldname)

List 参数

| 参数 | 说明 |
| --- | --- |
| constant | 任何数字或字符串。请注意，直接在脚本中写入的字符串必须附上单引号。没有单引号的字符串将被解释为变量，而变量的值之后将被使用。数字不必用单引号引起来。 |
| expression | 任意表达式。 |
| mask | 文件名称或文件夹名称掩码，包括任何有效的文件名称字符及标准通配符，比如 \* 和 ?。 |
| condition | 用于评估 True 或 False 的逻辑表达式。 |
| statements | 一个或多个 QlikView 脚本语句的任意组。 |
| filelist mask | 该语法会在匹配文件名称掩码的当前目录中生成逗号分隔的全部文件列表。 |
| dirlist mask | 该语法会在匹配文件夹名称掩码的当前文件夹中生成逗号分隔的全部文件夹列表。 |
| fieldvaluelist mask | 此语法迭代已经加载到 QlikView 的字段值。 |

警告注释Qlik Web 存储提供程序连接器 以及其它 DataFiles 连接不支持使用通配符（\* 和 ?）字符的筛选器掩码。

示例 1: 加载文件列表

```
// LOAD the files 1.csv, 3.csv, 7.csv and xyz.csv for each a in 1,3,7,'xyz'    LOAD * from file$(a).csv; next
```

示例 2: 在磁盘上创建文件列表

此示例加载文件夹中所有 QlikView 相关文件的列表。

```
 sub DoDir (Root)    for each Ext in 'qvw', 'qva', 'qvo', 'qvs', 'qvc', 'qvd'        for each File in filelist (Root&'\*.' &Ext)           LOAD              '$(File)' as Name,              FileSize( '$(File)' ) as Size,              FileTime( '$(File)' ) as FileTime          autogenerate 1;        next File     next Ext    for each Dir in dirlist (Root&'\*' )        call DoDir (Dir)     next Dir  end sub  call DoDir ('C:')
```

示例 3: 迭代字段值

此示例迭代已加载的 FIELD 值列表，并生成新字段 NEWFIELD。对每个 FIELD 值，都会创建两条 NEWFIELD 记录。

```
 load * inline [ FIELD one two three ];  FOR Each a in FieldValueList('FIELD') LOAD '$(a)' &'-'&RecNo() as NEWFIELD AutoGenerate 2; NEXT a  
```

最终生成的表格如下所示：

Example 3

| NEWFIELD |
| --- |
| one-1 |
| one-2 |
| two-1 |
| two-2 |
| three-1 |
| three-2 |

## 了解详情

* [For..next](https://help.qlik.com/zh-CN/qlikview/September2025/Subsystems/Client/Content/QV_QlikView/Scripting/ScriptControlStatements/For.htm)
* [Next](https://help.qlik.com/zh-CN/qlikview/September2025/Subsystems/Client/Content/QV_QlikView/Scripting/ScriptControlStatements/Next.htm)
* [Exit](https://help.qlik.com/zh-CN/qlikview/September2025/Subsystems/Client/Content/QV_QlikView/Scripting/ScriptControlStatements/Exit.htm)